﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using DevExpress.XtraEditors;
using QLTV_BLL;
using QLTV_Public;
using System.IO;

namespace GUI
{
    public partial class frmSinhVien : DevExpress.XtraEditors.XtraForm
    {
        #region khai bao bien

        DocGia_BLL dg_bll = new DocGia_BLL();
        SinhVien_BLL sv_bll = new SinhVien_BLL();
        DataTable dt;
        public string maDocGia = "";
        TextMessageBox box = new TextMessageBox();
        public string maDanToc = "";
        public string maLop = "";
        public string maLoaiDG = "";

        private string maLoaiThe = "";
        public string path = "";
        Image image;
        private bool isOK = false;
        private bool checkTT=false;
        DateTime ngayLamThe;
        #endregion

        #region LOadForm

        public frmSinhVien()
        {
            InitializeComponent();
        }

        private void frmSinhVien_Load(object sender, EventArgs e)
        {
            LoadComBobox();
            LoadData();
        }
        #endregion

        #region các chức năng

        private void btnLuuThoat_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            isOK = true;
            UpdateData();
        }

        private void btnLuu_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            isOK = false;
            UpdateData();
        }

        private void btnHuy_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            //ClearText();
            box.Huy_Text(this);
            SetInterface();
        }

        private void btnDong_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            DialogResult = DialogResult.OK;
        }
        private void btnAnh_Click(object sender, EventArgs e)
        {
            OpenFileDialog op = new OpenFileDialog();
            op.Filter = "(JPG fie)|*.jpg|*.jpg|(All file)|*.*|*.*";
            op.FilterIndex = 1;
            op.RestoreDirectory = true;
            if (op.ShowDialog() == DialogResult.OK)
            {
                path = op.FileName;
                pbAnh.ImageLocation = op.FileName;
            }
        }

        private void cboDanToc_TextChanged(object sender, EventArgs e)
        {
            try
            {
                maDanToc = cboDanToc.EditValue.ToString();
            }
            catch (Exception)
            { }
        }

        private void cboLop_TextChanged(object sender, EventArgs e)
        {
            try
            {
                maLop = cboLop.EditValue.ToString();
            }
            catch (Exception)
            { }
        }
        private void cboLoaiThe_TextChanged(object sender, EventArgs e)
        {
            try
            {
                maLoaiThe = cboLoaiThe.EditValue.ToString();
            }
            catch (Exception)
            { }
        }
        #endregion

        #region Các sự kiện
        private void frmSinhVien_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (e.Cancel == false)
                DialogResult = DialogResult.OK;
        }

        #endregion

        #region Hàm viết thêm
        private void LoadData()
        {
            if (maDocGia != "")
            {
                dt = sv_bll.Load_HocVien_Edit(maDocGia);
                DataRow dr = dt.Rows[0];
                txtMaDocGia.Text = maDocGia;
                txtHoTen.Text = dr["HoVaTen"].ToString();
                dtpNgaySinh.Text = dr["NgaySinh"].ToString();
                cboGioiTinh.Text = dr["GioiTinh"].ToString();
                maDanToc = dr["MaDanToc"].ToString();
                txtSDT.Text = dr["SoDienThoai"].ToString();
                maLop=dr["MaLop"].ToString();
                //maLoaiDG=dr["MaLoaiDG"].ToString();
                txtTrinhDo.Text=dr["TrinhDoVanHoa"].ToString();
                txtEmail.Text = dr["Email"].ToString();
                ngayLamThe =Convert.ToDateTime(dr["NgayLamThe"]);
                txtMaDocGia.Enabled = false;
                if (Convert.ToBoolean(dr["TrangThaiSD"]) == true)
                    ckbTrangThai.CheckState = CheckState.Checked;
                else
                    ckbTrangThai.CheckState = CheckState.Unchecked;
                pbAnh.Image = ConvertToImage(dt);
            }
        }
        private void LoadComBobox()
        {
            cboDanToc.Properties.DataSource = sv_bll.TaoBang(box.sqlSelectFile("MaDanToc", "TenDanToc", "DM_DanToc"));
            cboDanToc.Properties.DisplayMember = "TenDanToc";
            cboDanToc.Properties.ValueMember = "MaDanToc";

            cboLop.Properties.DataSource = sv_bll.TaoBang(box.sqlSelectFile("MaLop", "TenLop", "DM_Lop"));
            cboLop.Properties.DisplayMember = "TenLop";
            cboLop.Properties.ValueMember = "MaLop";

            cboLoaiThe.Properties.DataSource = sv_bll.TaoBang(box.sqlSelectFile("MaLoaiThe", "TenLoaiThe", "DM_LoaiThe"));
            cboLoaiThe.Properties.DisplayMember = "TenLoaiThe";
            cboLoaiThe.Properties.ValueMember = "MaLoaiThe";
        }
        private void SetInterface()
        {

            maDocGia = "";
            maDanToc = "";
            maLoaiDG = "";
            maLop = "";
            txtHoTen.Focus();
            
        }

        private byte[] converToByte(string url)
        {
            byte[] picbyte = null;
            FileInfo info = new FileInfo(url);
            long numByte = info.Length;
            FileStream fs;
            fs = new FileStream(url, FileMode.Open, FileAccess.Read);

            //fs.Read(picbyte, 0, System.Convert.ToInt32(fs.Length));
            //fs.Close();
            BinaryReader br = new BinaryReader(fs);
            picbyte = br.ReadBytes((int)numByte);
            return picbyte;

        }
        private Image ConvertToImage(DataTable d)
        {
            try
            {

                byte[] stream = (byte[])d.Rows[0][1];
                
                using (MemoryStream ms = new MemoryStream(stream, 0, stream.Length))
                {
                    ms.Write(stream, 0, stream.Length);
                    image = Image.FromStream(ms, true);
                }

            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            return image;
        }
        private bool checkValid()
        {
            if (txtMaDocGia.Text.Trim() == "")
            {
                XtraMessageBox.Show("Bạn chưa nhập Mã học viên.",box.Caption,MessageBoxButtons.OK,MessageBoxIcon.Information);
                txtMaDocGia.Focus();
                return false;
            }
            if (txtHoTen.Text.Trim() == "")
            {
                XtraMessageBox.Show("Bạn chưa nhập Tên học viên",box.Caption,MessageBoxButtons.OK,MessageBoxIcon.Information);
                txtHoTen.Focus();
                return false;
            }

            if (box.CompareDate(dtpNgaySinh.Value, DateTime.Now) == 1)
            {
                XtraMessageBox.Show("Ngày sinh không được lơn hơn ngày hiện tại.",box.Caption,MessageBoxButtons.OK,MessageBoxIcon.Information);
                dtpNgaySinh.Focus();
                return false;
            }
            if (cboGioiTinh.Text.Trim() == "")
            {
                XtraMessageBox.Show("Bạn chưa chọn Giới tính.",box.Caption,MessageBoxButtons.OK,MessageBoxIcon.Information);
                cboGioiTinh.Focus();
                return false;
            }
            if (cboDanToc.Text.Trim() == "")
            {
                XtraMessageBox.Show("Bạn chưa chọn Dân tôc.",box.Caption,MessageBoxButtons.OK,MessageBoxIcon.Information);
                cboDanToc.Focus();
                return false;
            }
            if (cboLop.Text.Trim() == "")
            {
                XtraMessageBox.Show("Bạn chưa chọn Lớp.",box.Caption,MessageBoxButtons.OK,MessageBoxIcon.Information);
                cboLop.Focus();
                return false;
            }
            if (txtTrinhDo.Text.Trim() == "")
            {
                XtraMessageBox.Show("Bạn chưa nhập trình độ.",box.Caption,MessageBoxButtons.OK,MessageBoxIcon.Information);
                txtTrinhDo.Focus();
                return false;

            }
            if (path=="")
            {
                XtraMessageBox.Show("Bạn chưa chọn Ảnh.",box.Caption,MessageBoxButtons.OK,MessageBoxIcon.Information);
                btnAnh.Focus();
                return false;
            }
            if (box.CompareDate(DateTime.Now, dtpNgayHetHan.Value) == 1)
            {
                XtraMessageBox.Show("Ngày Hết hạn phải lớn hơn ngày hiện tại.", box.Caption, MessageBoxButtons.OK, MessageBoxIcon.Warning);
                dtpNgayHetHan.Focus();
                return false;
            }
            
            return true;
        }

        private bool checkMaInsert()
        {
            //dt = sv_bll.TaoBang(box.sqlCheckExist("CTDG_SinhVien", "MaHocVien", txtMaDocGia.Text));
            //if (dt.Rows.Count > 0)
            //{
            //    XtraMessageBox.Show(box.Exist(txtMaDocGia.Text),box.Caption,MessageBoxButtons.OK,MessageBoxIcon.Warning);
            //    txtMaDocGia.Focus();
            //    return false;
            //}
            return true;
        }
        private void UpdateData()
        {
            if (checkValid())
            {
                DocGia_Public dg = new DocGia_Public();
                SinhVien_Public sv = new SinhVien_Public();
                if (maDocGia == "")
                {
                    string ma = "";
                    //luu vao bang Doc  Gia
                    ma = box.AutoID("DG", 2, sv_bll.TaoBang("select * from DocGia"));
                    dg.MaDocGia = ma;
                    dg.NgayLamThe = DateTime.Now;
                    dg.NgayHetHan = dtpNgayHetHan.Value;
                    dg.MaLoaiThe = maLoaiThe;
                    dg.TrangThaiSD = checkTT;
                    dg.MaNhanVien = box.MaNhanVien;

                    dg_bll.Insert(dg);
                    //luu vao bang CTDG_Sinh Vien
                    sv.MaDocGia = ma;
                    sv.Anh = converToByte(path);
                    sv.HoVaTen = box.toUpper(txtHoTen.Text);
                    sv.GioiTinh = cboGioiTinh.Text;
                    sv.NgaySinh = dtpNgaySinh.Value;
                    sv.MaDanToc = maDanToc;
                    sv.TrinhDoVanHoa = txtTrinhDo.Text;
                    sv.MaLop = maLop;

                    sv.SoDienThoai = txtSDT.Text;
                    sv.Email = txtEmail.Text;

                    sv_bll.Insert(sv, sv, sv, sv, sv, sv, sv, sv, sv, sv);
                    CloseForm();

                }
                else
                {
                    //Update bang Doc gia
                    dg.MaDocGia = maDocGia;
                    dg.NgayLamThe = ngayLamThe;
                    dg.NgayHetHan = dtpNgayHetHan.Value;
                    dg.MaLoaiThe = maLoaiThe;
                    dg.TrangThaiSD = checkTT;
                    dg.MaNhanVien = box.MaNhanVien;

                    dg_bll.Update(dg);
                    //luu vao bang CTDG_Sinh Vien
                    sv.MaDocGia = maDocGia;
                    sv.Anh = converToByte(path);
                    sv.HoVaTen = box.toUpper(txtHoTen.Text);
                    sv.GioiTinh = cboGioiTinh.Text;
                    sv.NgaySinh = dtpNgaySinh.Value;
                    sv.MaDanToc = maDanToc;
                    sv.TrinhDoVanHoa = txtTrinhDo.Text;
                    sv.MaLop = maLop;

                    sv.SoDienThoai = txtSDT.Text;
                    sv.Email = txtEmail.Text;

                    sv_bll.Update(sv, sv, sv, sv, sv, sv, sv, sv, sv, sv);
                    CloseForm();

                }
            }
        }
        private void CloseForm()
        {
            if (isOK == true)//luu va thoat
            {
                DialogResult = DialogResult.OK;
            }
            else//lưu và load lại form
            {
                box.Huy_Text(this);
                SetInterface();
                path = "";
            }

        }
        #endregion

        private void ckbTrangThai_CheckedChanged(object sender, EventArgs e)
        {
            if (ckbTrangThai.CheckState == CheckState.Checked)
                checkTT = true;
            else
                checkTT = false;
        }





    }
}